package web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.primefaces.model.DualListModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import service.ManutencaoService;
import service.PapelUsuarioService;
import service.PermissaoFuncionalidadeService;
import entity.PapelUsuario;
import entity.PermissaoFuncionalidade;

@Controller
@Scope("view")
public class ManterPapelUsuarioMB extends ManutencaoCRUDBean<PapelUsuario>
		implements Serializable {

	private static final long serialVersionUID = 7863504781978243773L;

	@Autowired
	private PapelUsuarioService papelUsuarioService;

	@Autowired
	private PermissaoFuncionalidadeService permissaoFuncionalidadeService;

	private PapelUsuario papelUsuario;

	private List<PapelUsuario> listaPapeisUsuarios;

	private List<PermissaoFuncionalidade> listaPermissoesFuncionalidades;

	private DualListModel<PermissaoFuncionalidade> permissoesDualList;

	private void carregarPermissoes() {
		listaPermissoesFuncionalidades = permissaoFuncionalidadeService
				.listarAtivos();
	}

	@Override
	protected void prepararAdicionar() {
		papelUsuario = papelUsuarioService.criarPapelUsuario();
		carregarPermissoes();

		permissoesDualList = new DualListModel<PermissaoFuncionalidade>(
				listaPermissoesFuncionalidades,
				new ArrayList<PermissaoFuncionalidade>());
	}

	@Override
	protected void prepararEditar() {
		carregarPermissoes();

		papelUsuario = papelUsuarioService.buscarPorChave(papelUsuario.getId());

		permissoesDualList = new DualListModel<PermissaoFuncionalidade>(
				listaPermissoesFuncionalidades,
				papelUsuario.getListaPermissoes());
	}

	@Override
	public void doSalvarAction() {
		getEntidade().setListaPermissoes(permissoesDualList.getTarget());
		super.doSalvarAction();
	}

	@Override
	public void doDetalharAction() {
		super.doDetalharAction();
	}

	@Override
	public ManutencaoService<PapelUsuario> getService() {
		return papelUsuarioService;
	}

	@Override
	public PapelUsuario getEntidade() {
		return papelUsuario;
	}

	@Override
	public void setEntidade(PapelUsuario entidade) {
		papelUsuario = entidade;
	}

	public List<PapelUsuario> getListaProduto() {
		return listaPapeisUsuarios;
	}

	public DualListModel<PermissaoFuncionalidade> getPermissoesDualList() {
		return permissoesDualList;
	}

	public void setPermissoesDualList(
		DualListModel<PermissaoFuncionalidade> permissoesDualList) {
	    this.permissoesDualList = permissoesDualList;
	}

}
